package com.penghaisoft.microwms.materialhand.web.outwarehouse.service;

import java.util.List;

import com.penghaisoft.microwms.common.data.model.RawHandOut;
import com.penghaisoft.microwms.common.data.model.RawHandOutSn;
import com.penghaisoft.microwms.common.dto.RawBackDto;
import com.penghaisoft.microwms.common.dto.Resp;
import com.penghaisoft.microwms.common.dto.TransResult;
import com.penghaisoft.microwms.common.wms.model.RawStorageSn;

/**
 * 原材料出库iter
 */
public interface IMaterialHandOutWhService {

    /** 
    * @Title: backMatScanBarCheck 
    * @Description: 退料校验
    * @param @param rawBackDto
    * @param @return  参数说明 
    * @return TransResult    返回类型
    * @author luoteng 
    * @date 2018年10月15日 下午1:08:52 
    * @throws 
    */
    public TransResult backMatScanBarCheck(RawBackDto rawBackDto);
    
    /**  
     * @Title: backHandOutCheck
     * @Description:   手工出库退料校验
     * @author Lengxf  
     * @date 2019年3月4日    
     */  
    public TransResult backHandOutCheck(RawBackDto rawBackDto);
    
    /** 
    * @Title: backMatScanBar 
    * @Description: 退料
    * @param @param rawBackDto
    * @param @return  参数说明 
    * @return TransResult    返回类型
    * @author luoteng 
    * @date 2018年10月15日 下午1:08:37 
    * @throws 
    */
    public TransResult backMatScanBar(RawBackDto rawBackDto);

	/** 
	* @Title: queryHandworkOut 
	* @Description: 手工出库单号
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return List<RawHandOut>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawHandOut> queryHandworkOut(RawHandOut rawHandOut);

	/** 
	* @Title: updateHandworkOut 
	* @Description: 将手工出库单状态置为发货中
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp updateHandworkOut(RawHandOut rawHandOut);

	/** 
	* @Title: queryHandworkOutNot2 
	* @Description: 手工出库单号，状态！=2（不为发货完成） 
	* @param @param rawHandOut
	* @param @return  参数说明 
	* @return List<RawHandOut>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawHandOut> queryHandworkOutNot2(RawHandOut rawHandOut);

	/** 
	* @Title: queryRawStorageSn 
	* @Description: 根据条码查询，状态为可用 
	* @param @param rawStorageSn
	* @param @return  参数说明 
	* @return List<RawStorageSn>    返回类型
	* @author jzh 
	* @throws 
	*/
	public List<RawStorageSn> queryRawStorageSn(RawStorageSn rawStorageSn);


	/**
	 * @param rawStorageSnNew  
	* @Title: updateAndCreateHandOut 
	* @Description: 更改已分配数量为新数量 并且 新增记录，更改条码状态为已出库 （保证事物）
	* @param @param rawHandOut
	* @param @param rawHandOut2
	* @param @param barcode
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp updateAndCreateHandOut(RawHandOut rawHandOutNew, RawHandOutSn rawHandOutSn, RawStorageSn rawStorageSnNew);

	/** 
	* @Title: handworkBack 
	* @Description: //将RawHandOutSn的scan_status置为退扫，将rawHandOut实发数量-数量，
	* 	//将rawStorageSn的BarcodeStatus置为0可用（保证事物）
	* @param @param rawHandOutSn
	* @param @param rawStorageSn
	* @param @return  参数说明 
	* @return Resp    返回类型
	* @author jzh 
	* @throws 
	*/
	public Resp handworkBack(RawHandOutSn rawHandOutSn, RawHandOut rawHandOut, RawStorageSn rawStorageSn);

	public Resp updateHandwork(RawHandOut rawHandOut);
	
	 /**  
	 * @Title: isOrNotHandOut
	 * @Description:   判断是否为手工出库
	 * @author Lengxf  
	 * @date 2019年3月4日    
	 */  
	public TransResult isOrNotHandOut(RawBackDto rawBackDto);


}
